package 简单.分类讨论;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * 给你一个整数数组 ranks 和一个字符数组 suit 。你有 5 张扑克牌，
 * 第 i 张牌大小为 ranks[i] ，花色为 suits[i] 。
 * 下述是从好到坏你可能持有的 手牌类型 ：
 * "Flush"：同花，五张相同花色的扑克牌。
 * "Three of a Kind"：三条，有 3 张大小相同的扑克牌。
 * "Pair"：对子，两张大小一样的扑克牌。
 * "High Card"：高牌，五张大小互不相同的扑克牌。
 * 请你返回一个字符串，表示给定的 5 张牌中，你能组成的 最好手牌类型 。
 * 注意：返回的字符串 大小写 需与题目描述相同。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/best-poker-hand
 */
public class 最好的扑克手牌_2347 {

    public static void main(String[] args) {

    }

    /**
     * 分类讨论
     */
    public String bestHand(int[] ranks, char[] suits) {
        Map<Integer, Integer> rankMap = new HashMap<>();
        Set<Character> suitSet = new HashSet<>();
        for (int i = 0; i < 5; i++) {
            rankMap.put(ranks[i], rankMap.getOrDefault(ranks[i], 0) + 1);
            suitSet.add(suits[i]);
        }

        int maxSameCnt = 0;
        for (Map.Entry<Integer, Integer> entry : rankMap.entrySet()) {
            maxSameCnt = Math.max(maxSameCnt, entry.getValue());
        }

        if (suitSet.size() == 1) {
            return "Flush";
        } else if (maxSameCnt >= 3) {
            return "Three of a Kind";
        } else if (maxSameCnt == 2) {
            return "Pair";
        }
        return "High Card";
    }

}
